package com.rui.study.commons.study.model.dto;

import com.rui.study.commons.util.StringUtil;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.validator.constraints.NotBlank;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;

/**
 * @program: uasc_20180904
 * @description: 账号传输对象
 * @author: Yaowr
 * @create: 2018-09-07 11:46
 **/
@Getter
@Setter
public class AccountDTO {

    /**
     * 账号ID
     */
    @NotBlank(message = "不能为空")
    private String accountId;

    /**
     * 邮箱
     */
    private String email;

    /**
     * 手机号
     */
    private String cellPhone;

    /* 用户名：手机号 或 邮箱 */
    @NotBlank(message = "不能为空")
    private String username;

    /* 身份标识符： 手机号、邮箱、accountId或userId */
    @NotBlank(message = "不能为空")
    private String identifier;

    /* 验证码 */
    @NotBlank(message = "不能为空")
    private String verifyCode;

    /**
     * 密码
     */
    @NotBlank(message = "不能为空")
    private String password;

    /* 密码是否MD5加密 */
    private Boolean passMd5ed;

    /* 新密码 */
    @NotBlank(message = "不能为空")
    private String newPassword;

    /**
     * 用户类型
     */
    private String userType;

    /**
     * 父级账号ID
     */
    private String parentId;

    /**
     * 账号状态: 1-正常 2-已冻结
     */
    private byte state;

    /* 冻结标记 */
    @Pattern(regexp = "^true|false$", message = "只能为true或false")
    @NotNull(message = "只能为true为false")
    private String enable;

     /**
     * 冻结或启用意见
     */
     @NotBlank(message = "不能为空")
     private String freezeOpinion;

    /**
     * 注册时的远程客户端IP
     */
    private String remoteHost;

    /**
     * 最后一次登录时间
     */
    private String lastLoginAt;

    /**
     * 账号创建的时间
     */
    private String createAt;

    /**
     * 账号最后一次更改的时间
     */
    private String updateAt;


    public String getIdentifier() {
        String identifier;
        if (!StringUtil.isEmpty(this.identifier)) {
            identifier = this.identifier;
        } else if (!StringUtil.isEmpty(this.accountId)) {
            identifier = this.accountId;
        } else if (!StringUtil.isEmpty(this.email)) {
            identifier = this.email;
        } else {
            identifier = this.cellPhone;
        }
        return identifier;
    }

    public Boolean getPassMd5ed() {
        if(this.passMd5ed==null){
            this.passMd5ed = false;
        }
        return passMd5ed;
    }

    public void setPassMd5ed(Boolean passMd5ed) {
        this.passMd5ed = passMd5ed;
    }
}
